package avicit.bdp.dms.perm.dao;

import avicit.bdp.common.base.BaseDAO;
import avicit.bdp.dms.perm.dto.CategoryPermDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @金航数码科技有限责任公司
 * @作者：developer
 * @邮箱：developer@avic-digital.com
 * @创建时间： 2022-10-09
 * @类说明：CategoryPermDAO
 * @修改记录：
 * @注意事项：
 * @主要功能：模型分类权限DAO
 */
@Repository
public interface CategoryPermDAO extends BaseDAO<CategoryPermDTO> {
    /**
     * 根据角色获取所有权限（包括查看、编辑）
     * @param roleIdList
     * @return
     */
    List<CategoryPermDTO> getAllPermListByRoles(@Param("roleIdList") List<String> roleIdList);

    /**
     * 根据角色获取数据查看权限
     * @param roleIdList
     * @return
     */
    List<CategoryPermDTO> getDataViewPermListByRoles(@Param("roleIdList") List<String> roleIdList);

    /**
     * 授权角色查询指定角色的权限（只包含授权角色授予的权限）
     * @param roleId
     * @return
     */
    List<CategoryPermDTO> getGrantedPermList(@Param("roleId")String roleId);

    /**
     * 根据角色和节点ID获取附加权限
     * 注意：
     *     1、删除权限时，同步删除附加权限；
     * @param roleId
     * @param nodeId
     * @return
     */
    List<CategoryPermDTO> getRelatedPermList(@Param("roleId")String roleId, @Param("nodeId")String nodeId);

    /**
     * 根据角色ID删除权限（授权角色授权时先删除旧权限，再设置新权限）
     * 场景1：业务模块删除模型分类节点时，根据nodeId删除权限
     * 场景2：授权角色新增权限时，根据roleId+nodeId删除权限
     * @param roleId 角色ID
     * @param nodeId 模型分类节点ID
     * @param actionList 待移除权限
     * @return
     */
    int deletePermByCond(@Param("roleId")String roleId,
                         @Param("nodeId")String nodeId,
                         @Param("actionList")List<Integer> actionList);

    /**
     * 根据角色ID删除授予的权限，related=0
     * 场景1：数据安全-模型授权，移除权限时，先删除直接授予的权限，后删除关联权限
     * @param roleId 角色ID
     * @param nodeId 模型分类节点ID
     * @return
     */
    int deleteGrantedPermByCond(@Param("roleId")String roleId,
                                @Param("nodeId")String nodeId,
                                @Param("actionList")List<Integer> actionList);

    /**
     * 批量插入
     * @param permList
     * @return
     */
    int batchInsertCategoryPermission(@Param("permList") List<CategoryPermDTO> permList);
}
